Python学习笔记3:用Python实现三国演义文本分析(人物出场次数及人物词云) 您所在的位置:网站首页 pyecharts 背景图 Python学习笔记3:用Python实现三国演义文本分析(人物出场次数及人物词云)

Python学习笔记3:用Python实现三国演义文本分析(人物出场次数及人物词云)

2023-05-09 22:01| 来源: 网络整理| 查看: 265

《三国演义》是我很喜欢看的一部经典名著,里面有各具特色的人物。那么人物的出场次数如何呢?现用Python来回答这个问题。

本文用Python对《三国演义》中人物出场次数进行了统计排序,并进行可视化展示,最后对小说人物进行了词云分析。

配套源代码及程序讲解。

人物出场次数可视化展示(极坐标图和柱状图):

人物词云:

大体思路是用jieba库进行分词,排除掉一些非人名词语。然后对人物频率进行统计排序。最后生成词云图。

1.分词#分词 import jieba txt=open("三国演义.txt",'r',encoding = 'UTF-8').read() words=jieba.lcut(txt) #精确模式分词,重点1 counts={} #创建字典,存放人名word和次数count for word in words: if len(word)==1: #排除一个字(非人名) continue #同人不同名合并 elif word == "诸葛亮" or word == "孔明曰": rword = "孔明" elif word == "关公" or word == "云长": rword = "关羽" elif word == "玄德" or word == "玄德曰": rword = "刘备" elif word == "孟德" or word == "丞相": rword = "曹操" else: rword=word counts[rword]=counts.get(rword,0)+1 #重点2 #排除非人名词语 with open('停用词库.txt', 'r', encoding='UTF-8') as meaninglessFile: stopwords = set(meaninglessFile.read().split('\n')) for word in stopwords: del(counts[word]) items=list(counts.items()) #将字典转换为列表 items.sort(key=lambda x:x[1],reverse=True) #重点3 num=13 #打印出场数前num的人名 for i in range(num): word,count=items[i] print("{0:3}".format(word,count))

输出结果:

曹操 1428

孔明 1373

刘备 1222

关羽 779

张飞 348

吕布 300

孙权 264

赵云 255

司马懿 219

周瑜 217

袁绍 190

马超 185

魏延 177

讲解:

1.jieba库是Python的第三方中文分词库,安装方法:

pip install jieba

对于英文来说,用split()方法即可。

2.counts[rword]=counts.get(rword,0)+1

counts.get(rword,0)方法表示:如果键rword在字典counts中,就返回rword对应的值;否则,返回0。

3.items.sort(key=lambda x:x[1],reverse=True)

按列表items的第二个字段的倒序重新排序。

4.运行程序的时候发现文件读取错误。

是因为编码的问题。解决方法一:新建txt文件,将原来文件复制进去,替换掉源文件,问题得到解决。解决方法二:txt=open("三国演义.txt", encoding='gb18030', errors='ignore').read() 改变编码方式,运行了一下也能解决问题。最终采用的是第一种方法。

5.这段代码主要分三步走:

获取文本文件,进行分词;

对每个词进行计数;

对单词频率排序。

2.人物出场次数进行数据存储和可视化#导出数据 fo = open("人物出场次数.txt", "a", encoding='utf-8') for i in range(num): word, count=items[i] word = str(word) count = str(count) fo.write(word) fo.write(':') #使用冒号分开 fo.write(count) fo.write('\n') #换行 fo.close() #关闭文件 #将txt文本里的数据转换为字典 fr = open('人物出场次数.txt', 'r',encoding='utf-8' ) dic = {} keys = [] # 用来存储读取的顺序 for line in fr: v = line.strip().split(':') dic[v[0]] = v[1] keys.append(v[0]) fr.close() print(dic) # 绘柱状图 from pyecharts.charts import Bar #从pyecharts库中导入Bar子类 list1=list(dic.keys()) #人物 list2=list(dic.values()) #出场次数 bar = Bar() #定义柱状图 bar.add_xaxis(list1) bar.add_yaxis("人物出场次数",list2,) bar.render("人物出场次数可视化图.html") #生成render.html文件 # 绘极坐标图 from pyecharts import options as opts #list1.sort(reverse=True) #list2.sort(reverse=True) polar = ( Polar() .add_schema( radiusaxis_opts=opts.RadiusAxisOpts(data=list1, type_="category"), ) .add("", list2, type_='bar') ) #polar.render_notebook() polar.render("人物出场次数极坐标图.html")

讲解:

1.将出场次数排名前13的保存文件,并保存到dic的字典中。

2.strip()用于移除字符串头尾指定的字符(默认为空格或换行符)。

str.split(str="", num=string.count(str)) 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串。

3.知识点:字典dic中添加键值对的方法。

dic[v[0]] = v[1]

4.柱状图部分别以字典dic的键和值为横纵坐标进行画图。

5.安装了3个prechart库发现,只有prechart35这个能用。Prechart是Python强大的第三方可视化库,可以绘制很多酷炫的图像。

3.生成人物词云#词云分析 import wordcloud import matplotlib.pyplot as plt import numpy # numpy数据处理库 from PIL import Image # 图像处理库 mask = numpy.array(Image.open( '背景.jpg')) # 定义词频背景 # 设置词云相关参数 wc = wordcloud.WordCloud( font_path = 'C:\Windows\Fonts\msyh.ttc', # 设置字体(这里选择“仿宋”) background_color='white', # 背景颜色 mask = mask, # 文字颜色+形状(有mask参数再设定宽高是无效的) max_words = num, # 显示词数 max_font_size = 150 , # 最大字号 stopwords={'曰'}, # 设置停用词,不再词云图中表示 ) wc.generate_from_frequencies(counts) wc.recolor(color_func=wordcloud.ImageColorGenerator(mask)) plt.imshow(wc) plt.axis("off") plt.show() wc.to_file( '词云.jpg')

讲解:

1.wordcloud是Python词云展示第三方库,以词语为基本单位,通过图形可视化的方式,可以更加直观和艺术的展示文本。

2.最常用的方法是用wc.generate(text)直接生成词云。

3.generate_from_frequencies(counts):已知词及其对应的词频,注意括号中为字典格式。

【参考】:

[1] 嵩天.Python语言程序设计基础.高等教育出版社[M],2019.

[2] Eric Mathes.Python编程从入门到实践.人民邮电出版社[M],2020.

[3] Python之wordcloud库使用_jinsefm的博客-CSDN博客

[4] python三国演义人物 统计分析_使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。..._weixin_39734493的博客-CSDN博客

[5] Python爬虫爬取哈利波特小说,并用数据可视化分析出场人物 - 知乎 (zhihu.com)

[6] python实现对小说的文本分析(人物关系图,人物词云等)_YouYang_Wang的博客-CSDN博客_python小说文本分析

[7] 使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。 - 这题必考 - 博客园 (cnblogs.com)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有